Introducción a R

Autor: Roberto Muñoz
E-mail: rmunoz@uc.cl

R es un lenguaje de programación estadístico que fue desarrollado por los investigadores Ross Ihaka y Robert Gentleman en la Universidad de Auckland (Nueva Zelanda). Se puede descargar gratuitamente desde internet e instalar en cualquier computador. En este curso usaremos el pack R-essentials distribuido por Anaconda.

Lo primero que haremos será en configurar el sistema para usar UTF-8 como formato de codificación de caracteres. Esto es importante a la hora de usar acentos o caractéres especiales en R.


In [1]:
Sys.setlocale("LC_ALL", 'en_US.UTF-8')
sessionInfo()


'en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/C'
R version 3.3.3 (2017-03-06)
Platform: x86_64-apple-darwin13.4.0 (64-bit)
Running under: OS X Yosemite 10.10.5

locale:
[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/C

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

loaded via a namespace (and not attached):
 [1] R6_2.2.1            magrittr_1.5        IRdisplay_0.4.4    
 [4] pbdZMQ_0.2-6        tools_3.3.3         crayon_1.3.2       
 [7] uuid_0.1-2          stringi_1.1.5       IRkernel_0.8.6.9000
[10] jsonlite_1.5        stringr_1.2.0       digest_0.6.12      
[13] repr_0.12.0         evaluate_0.10      

Cargar variables en memoria y hacer operaciones


In [2]:
a = 2
b = 3.5

In [3]:
c = a + b
paste("suma de a + b = ",c)
d = a * b
paste("multiplicación de a * b = ",d)
e = a ** b
# el signo "**" representa "elevar a"
paste("a elevado a b = ",e)
f = b / a
paste("b dividido por a = ",f)


'suma de a + b = 5.5'
'multiplicación de a * b = 7'
'a elevado a b = 11.3137084989848'
'b dividido por a = 1.75'

Cargar datasets incluidos en R

R incluye una serie de datasets (tablas de datos) que pueden ser usados como ejemplos. Para mostrar la lista completa de los datasets basta ejecuta el siguiente comando


In [4]:
library(help = "datasets")


Para este tutorial cargaremos el dataset llamado iris, el cual contiene información del tamaño de los pétalos y sépalos de un conjunto de flores iris.


In [5]:
library(datasets)
data(iris)
iris


Sepal.LengthSepal.WidthPetal.LengthPetal.WidthSpecies
5.1 3.5 1.4 0.2 setosa
4.9 3.0 1.4 0.2 setosa
4.7 3.2 1.3 0.2 setosa
4.6 3.1 1.5 0.2 setosa
5.0 3.6 1.4 0.2 setosa
5.4 3.9 1.7 0.4 setosa
4.6 3.4 1.4 0.3 setosa
5.0 3.4 1.5 0.2 setosa
4.4 2.9 1.4 0.2 setosa
4.9 3.1 1.5 0.1 setosa
5.4 3.7 1.5 0.2 setosa
4.8 3.4 1.6 0.2 setosa
4.8 3.0 1.4 0.1 setosa
4.3 3.0 1.1 0.1 setosa
5.8 4.0 1.2 0.2 setosa
5.7 4.4 1.5 0.4 setosa
5.4 3.9 1.3 0.4 setosa
5.1 3.5 1.4 0.3 setosa
5.7 3.8 1.7 0.3 setosa
5.1 3.8 1.5 0.3 setosa
5.4 3.4 1.7 0.2 setosa
5.1 3.7 1.5 0.4 setosa
4.6 3.6 1.0 0.2 setosa
5.1 3.3 1.7 0.5 setosa
4.8 3.4 1.9 0.2 setosa
5.0 3.0 1.6 0.2 setosa
5.0 3.4 1.6 0.4 setosa
5.2 3.5 1.5 0.2 setosa
5.2 3.4 1.4 0.2 setosa
4.7 3.2 1.6 0.2 setosa
6.9 3.2 5.7 2.3 virginica
5.6 2.8 4.9 2.0 virginica
7.7 2.8 6.7 2.0 virginica
6.3 2.7 4.9 1.8 virginica
6.7 3.3 5.7 2.1 virginica
7.2 3.2 6.0 1.8 virginica
6.2 2.8 4.8 1.8 virginica
6.1 3.0 4.9 1.8 virginica
6.4 2.8 5.6 2.1 virginica
7.2 3.0 5.8 1.6 virginica
7.4 2.8 6.1 1.9 virginica
7.9 3.8 6.4 2.0 virginica
6.4 2.8 5.6 2.2 virginica
6.3 2.8 5.1 1.5 virginica
6.1 2.6 5.6 1.4 virginica
7.7 3.0 6.1 2.3 virginica
6.3 3.4 5.6 2.4 virginica
6.4 3.1 5.5 1.8 virginica
6.0 3.0 4.8 1.8 virginica
6.9 3.1 5.4 2.1 virginica
6.7 3.1 5.6 2.4 virginica
6.9 3.1 5.1 2.3 virginica
5.8 2.7 5.1 1.9 virginica
6.8 3.2 5.9 2.3 virginica
6.7 3.3 5.7 2.5 virginica
6.7 3.0 5.2 2.3 virginica
6.3 2.5 5.0 1.9 virginica
6.5 3.0 5.2 2.0 virginica
6.2 3.4 5.4 2.3 virginica
5.9 3.0 5.1 1.8 virginica

Librería dplyr

La librería dplyr de R facilita la manipulación de los datos mediante funciones previamente definidas. Algunas operaciones que facilita son filtrar filas, seleccionar ciertas columnas, reordenar las filasy de acuerdo a cierto criterio y entregar resúmenes de los datos.

Más info en este link https://cran.rstudio.com/web/packages/dplyr/vignettes/introduction.html


In [6]:
names(iris) <- tolower(names(iris))
library(dplyr)


Attaching package: ‘dplyr’

The following objects are masked from ‘package:stats’:

    filter, lag

The following objects are masked from ‘package:base’:

    intersect, setdiff, setequal, union


In [7]:
iris


sepal.lengthsepal.widthpetal.lengthpetal.widthspecies
5.1 3.5 1.4 0.2 setosa
4.9 3.0 1.4 0.2 setosa
4.7 3.2 1.3 0.2 setosa
4.6 3.1 1.5 0.2 setosa
5.0 3.6 1.4 0.2 setosa
5.4 3.9 1.7 0.4 setosa
4.6 3.4 1.4 0.3 setosa
5.0 3.4 1.5 0.2 setosa
4.4 2.9 1.4 0.2 setosa
4.9 3.1 1.5 0.1 setosa
5.4 3.7 1.5 0.2 setosa
4.8 3.4 1.6 0.2 setosa
4.8 3.0 1.4 0.1 setosa
4.3 3.0 1.1 0.1 setosa
5.8 4.0 1.2 0.2 setosa
5.7 4.4 1.5 0.4 setosa
5.4 3.9 1.3 0.4 setosa
5.1 3.5 1.4 0.3 setosa
5.7 3.8 1.7 0.3 setosa
5.1 3.8 1.5 0.3 setosa
5.4 3.4 1.7 0.2 setosa
5.1 3.7 1.5 0.4 setosa
4.6 3.6 1.0 0.2 setosa
5.1 3.3 1.7 0.5 setosa
4.8 3.4 1.9 0.2 setosa
5.0 3.0 1.6 0.2 setosa
5.0 3.4 1.6 0.4 setosa
5.2 3.5 1.5 0.2 setosa
5.2 3.4 1.4 0.2 setosa
4.7 3.2 1.6 0.2 setosa
6.9 3.2 5.7 2.3 virginica
5.6 2.8 4.9 2.0 virginica
7.7 2.8 6.7 2.0 virginica
6.3 2.7 4.9 1.8 virginica
6.7 3.3 5.7 2.1 virginica
7.2 3.2 6.0 1.8 virginica
6.2 2.8 4.8 1.8 virginica
6.1 3.0 4.9 1.8 virginica
6.4 2.8 5.6 2.1 virginica
7.2 3.0 5.8 1.6 virginica
7.4 2.8 6.1 1.9 virginica
7.9 3.8 6.4 2.0 virginica
6.4 2.8 5.6 2.2 virginica
6.3 2.8 5.1 1.5 virginica
6.1 2.6 5.6 1.4 virginica
7.7 3.0 6.1 2.3 virginica
6.3 3.4 5.6 2.4 virginica
6.4 3.1 5.5 1.8 virginica
6.0 3.0 4.8 1.8 virginica
6.9 3.1 5.4 2.1 virginica
6.7 3.1 5.6 2.4 virginica
6.9 3.1 5.1 2.3 virginica
5.8 2.7 5.1 1.9 virginica
6.8 3.2 5.9 2.3 virginica
6.7 3.3 5.7 2.5 virginica
6.7 3.0 5.2 2.3 virginica
6.3 2.5 5.0 1.9 virginica
6.5 3.0 5.2 2.0 virginica
6.2 3.4 5.4 2.3 virginica
5.9 3.0 5.1 1.8 virginica

In [8]:
head(iris)


sepal.lengthsepal.widthpetal.lengthpetal.widthspecies
5.1 3.5 1.4 0.2 setosa
4.9 3.0 1.4 0.2 setosa
4.7 3.2 1.3 0.2 setosa
4.6 3.1 1.5 0.2 setosa
5.0 3.6 1.4 0.2 setosa
5.4 3.9 1.7 0.4 setosa

In [9]:
columns=ncol(iris)
rows=nrow(iris)
message("Columns=",columns)
message("Rows=",rows)


Columns=5
Rows=150

In [10]:
summary(iris)


  sepal.length    sepal.width     petal.length    petal.width   
 Min.   :4.300   Min.   :2.000   Min.   :1.000   Min.   :0.100  
 1st Qu.:5.100   1st Qu.:2.800   1st Qu.:1.600   1st Qu.:0.300  
 Median :5.800   Median :3.000   Median :4.350   Median :1.300  
 Mean   :5.843   Mean   :3.057   Mean   :3.758   Mean   :1.199  
 3rd Qu.:6.400   3rd Qu.:3.300   3rd Qu.:5.100   3rd Qu.:1.800  
 Max.   :7.900   Max.   :4.400   Max.   :6.900   Max.   :2.500  
       species  
 setosa    :50  
 versicolor:50  
 virginica :50  
                
                
                

Calcular el ancho promedio de los sépalos por especie


In [11]:
iris %>%
group_by(species) %>%
summarise(sepal.width.avg = mean(sepal.width)) %>%
arrange(sepal.width.avg)


speciessepal.width.avg
versicolor2.770
virginica 2.974
setosa 3.428

Fitrar los datos en base una columna


In [12]:
virginica <- filter(iris, species == "virginica")
head(virginica) # This dispalys the first six rows


sepal.lengthsepal.widthpetal.lengthpetal.widthspecies
6.3 3.3 6.0 2.5 virginica
5.8 2.7 5.1 1.9 virginica
7.1 3.0 5.9 2.1 virginica
6.3 2.9 5.6 1.8 virginica
6.5 3.0 5.8 2.2 virginica
7.6 3.0 6.6 2.1 virginica

In [13]:
virginica %>%
summarise(sepal.width.avg = mean(sepal.width))


sepal.width.avg
2.974

Visualizar usando nativas de R

R incluye una serie de funciones para hacer gráficos y visualizaciones. La función plot permite hacer gráficos de puntos y de líneas.


In [18]:
plot(iris, main="Dataset Iris")



In [19]:
plot(iris[,1], col="red")



In [20]:
hist(iris$sepal.width)


Visualizar usando ggplot2

ggplot2 es la librería de visualización más popular de R. Fue desarrollada por el estadístico Hadley Wickham, quien actualmente es el Director científico de R-studio. La librería ggplot2 ofrece un lenguaje avanzado que permite crear gráficos elegantes y complejos.


In [21]:
library(ggplot2)

In [22]:
ggplot(data=iris, aes(x=sepal.length, y=sepal.width, color=species)) + geom_point(size=3)



In [23]:
ggplot(data=iris, aes(sepal.width)) + geom_histogram(bins = 10)



In [ ]: